#MenuJoueurP
#
#MenuJoueur presentation

inherit MenuJoueurP Presentation
method MenuJoueurP constructor {control liste window} {
	this inherited $control
	
	frame $window.pltop
	pack configure $window.pltop -side top -fill both -expand 1
	frame $window.plbottom
	pack configure $window.plbottom -side top -fill both -expand 1
	
	
	set this(listboxjoueur) [listbox $window.pltop.listboxjoueur]
    set select ""
    set this(defile) [scrollbar $window.pltop.defile -orient vertical]
     
    
    pack configure $this(defile) -side right -fill both -expand 1  
    
    pack configure $this(listboxjoueur) -side left -fill both -expand 1
   
    
    $this(listboxjoueur) configure -yscrollcommand [list $this(defile) set]
    $this(defile) configure -command [list $this(listboxjoueur) yview]
    
    #set this(defile) [scrollbar $window.defile -orient vertical]
    
    #grid $this(listboxjoueur) -row 0 -column 0 -sticky snew
    #grid $this(defile) -row 0 -column 1 -sticky snew
    
    #set ::liste [info vars]
  # listbox et ascenseur vertical
  #listbox .lb -listvariable ::liste
  #scrollbar .vs -orient vertical
  # placement
  #grid .lb -row 0 -column 0
  #grid .vs -row 0 -column 1 -sticky ns
  # liens
  #.lb configure -yscrollcommand [list .vs set]
  #.vs configure -command [list .lb yview]
    
    
    
 
 	# Insertion des joueurs:
 		
 		foreach id [dict keys $liste] {
 			
 			
 		$this(listboxjoueur) insert end "$id"
 		
 		}
 		
 		 		
		
	# évênement	lors d'un double click dans la liste:
 	bind $this(listboxjoueur)  <Double-1> {set select [selection get];puts "$select"  }
 	
 	
 	#set this(LANCER) [button $window.plbottom.play -text "Lancer PARTIE" -command "[$this(control) play]"]
	#pack configure $this(LANCER) -side top -expand 1 -fill both
	
	set this(ADDVAISSEAU) [button $window.plbottom.addvaisseau -text "Ajouter Vaisseau" -command "$objName fenetreAjoutVaisseau"]
	pack configure $this(ADDVAISSEAU) -side top -expand 1 -fill both
	
	set this(DELVAISSEAU) [button $window.plbottom.supvaisseau -text "Supprimer Vaisseau" -command "$objName fenetreSupprimVaisseau"]
	pack configure $this(DELVAISSEAU) -side top -expand 1 -fill both
	
	set this(ADDPLAYER) [button $window.plbottom.addjoueur -text "Ajouter Joueur" -command "$objName fenetreAjoutJoueur"]
	pack configure $this(ADDPLAYER) -side top -expand 1 -fill both
	
	set this(DELPLAYER) [button $window.plbottom.supjoueur -text "Supprimer Joueur" -command "$objName fenetreSupprimJoueur"]
	pack configure $this(DELPLAYER) -side top -expand 1 -fill both
	
				 
				 
}

method MenuJoueurP fenetreSupprimJoueur {} {
  	
  	if {[$this(listboxjoueur) curselection] == ""} {
  		
  	set answer [tk_messageBox -message "Vous devez sélectionner un joueur dans la liste pour le supprimer" -type ok -icon warning]

  		
  	} else {
  		
  		set answer [tk_messageBox -message "Vous êtes sur le point de supprimer un joueur. Confirmer la suppression en appuyant sur oui" -type yesno -icon question]
 		switch -- $answer {
   		yes {this supprimerJoueur}
   		}
   		
   		}
	
	
}


method MenuJoueurP supprimerJoueur {} {
	
$this(control) supprimerJoueur [$this(listboxjoueur) get [$this(listboxjoueur) curselection] ]
$this(listboxjoueur) delete [$this(listboxjoueur) curselection]


	
	
}


method MenuJoueurP fenetreAjoutJoueur {} {
	
	set this(fenetreAjoutJoueur) [toplevel .fenetreAjoutJoueur]
	
	
	wm protocol $this(fenetreAjoutJoueur) WM_DELETE_WINDOW
  	
  	set this(frame_ajout_joueur) [frame $this(fenetreAjoutJoueur).frame_ajout_joueur -width 300 -height 400]
  	pack configure $this(frame_ajout_joueur) -expand 1 -fill both
  	
  	
  	set this(label_joueur) [label $this(frame_ajout_joueur).lab -text "Enter name:" -bg green]
  	set this(nom_joueur) [entry $this(frame_ajout_joueur).nom -width 20]
  	pack configure $this(label_joueur) -side top
  	pack configure $this(nom_joueur) -side top
  	set this(valider) [button $this(frame_ajout_joueur).valider -text "Valider l'ajout d'un joueur" -command "$objName ajouterJoueur"]
  	pack configure $this(valider) -side top
	
	
}

method MenuJoueurP ajouterJoueur {} {
	
	
	set id [$this(control) ajoutJoueur_dansNoyau [$this(nom_joueur) get]]
	$this(listboxjoueur) insert end "$id"
	
	destroy $this(fenetreAjoutJoueur)
	
	
}


method MenuJoueurP fenetreAjoutVaisseau {} {


    if {[$this(listboxjoueur) curselection] == ""} {
  		
  	set answer [tk_messageBox -message "Vous devez sélectionner un joueur dans la liste pour lui ajouter un vaisseau" -type ok -icon warning]

  		
  	} else {
	
	set this(fenetreAjoutVaisseau) [toplevel .fenetreAjoutVaisseau]
	
	
	wm protocol $this(fenetreAjoutVaisseau) WM_DELETE_WINDOW
  	
  	set this(frame_ajout_vaisseau) [frame $this(fenetreAjoutVaisseau).frame_ajout_vaisseau -width 300 -height 400]
  	pack configure $this(frame_ajout_vaisseau) -expand 1 -fill both
  	
  	
  	set this(posx) [entry $this(frame_ajout_vaisseau).posx -width 20]
  	set this(posy) [entry $this(frame_ajout_vaisseau).posy -width 20]
  	set this(radius) [entry $this(frame_ajout_vaisseau).radius -width 20]
  	
  	set liste [dict keys [$this(control) getListeJoueurs]]
 
 	set idselect [$this(listboxjoueur) get [$this(listboxjoueur) curselection]]
  	set this(id_player) [label $this(frame_ajout_vaisseau).e -width 20 -text "$idselect"]
  	
  	
  	pack configure $this(id_player) -side top
  	pack configure $this(posx) -side top
  	pack configure $this(posy) -side top
  	pack configure $this(radius) -side top
  	
  	
  	set this(valider) [button $this(frame_ajout_vaisseau).valider -text "Valider l'ajout" -command "$objName ajouterVaisseau $idselect"]
  	
  	pack configure $this(valider) -side top
  	
  	}
		
}


method MenuJoueurP fenetreSupprimVaisseau {} {
	
	
	if {[$this(listboxjoueur) curselection] == ""} {
  		
  	set answer [tk_messageBox -message "Vous devez sélectionner un joueur dans la liste pour lui supprimer un vaisseau" -type ok -icon warning]

  		
  	} else {

	
	set this(fenetreSupprimVaisseau) [toplevel .fenetreSupprimVaisseau]
	
	
	wm protocol $this(fenetreSupprimVaisseau) WM_DELETE_WINDOW
  	
  	set this(frame_sup) [frame $this(fenetreSupprimVaisseau).frame_sup -width 300 -height 400]
  	pack configure $this(frame_sup) -expand 1 -fill both
  	
  
  	set listeplayer [dict keys [$this(control) getListeJoueurs]]
  	  	
  	
  	#set this(id_player_supvaisseau) [ttk::combobox $this(frame_sup).id_player_supvaisseau -textvariable "Les Joueurs" -values $listeplayer]
  	set idselect [$this(listboxjoueur) get [$this(listboxjoueur) curselection]]
  	set this(id_player) [label $this(frame_sup).e -width 20 -text "$idselect"]
  	  	
  	pack configure $this(id_player) -side top
  	
  	
  	#set this(voirlesvaisseau) [button $this(frame_sup).voirlesvaisseau -text "Voir les vaisseaux de ce joueur" -command "$objName voirvaisseau"]
  	
  	#pack configure $this(voirlesvaisseau) -side top
  	
  	
  	set listevaisseau [$this(control) getListeVaisseau_joueur $idselect]
	
	
  	set this(id_vaisseau_supvaisseau) [ttk::combobox $this(frame_sup).id_vaisseau -textvariable "Vaisseau du joueur sélectionné" -values $listevaisseau]

	pack configure $this(id_vaisseau_supvaisseau) -side top
	
	set this(supprimer) [button $this(frame_sup).supprimer -text "Supprimer Vaisseau" -command "$objName supprimerVaisseau "]
  	
  	pack configure $this(supprimer) -side top
  	}		
}


method MenuJoueurP voirvaisseau {} {
	
	set joueur [$this(id_player_supvaisseau) get]
	
	set listevaisseau [$this(control) getListeVaisseau_joueur $joueur]
	
	
  	set this(id_vaisseau_supvaisseau) [ttk::combobox $this(frame_sup).id_vaisseau -textvariable "Vaisseau du joueur sélectionné" -values $listevaisseau]

	pack configure $this(id_vaisseau_supvaisseau) -side top
	
	set this(supprimer) [button $this(frame_sup).supprimer -text "Supprimer Vaisseau" -command "$objName supprimerVaisseau "]
  	
  	pack configure $this(supprimer) -side top


	
}

method MenuJoueurP supprimerVaisseau {} {
	
	
	$this(control) supprimerVaisseau [$this(id_player_supvaisseau) get] [$this(id_vaisseau_supvaisseau) get] 
	
	
}



method MenuJoueurP ajouterVaisseau {idp} {
	

$this(control) ajouterVaisseau  $idp [$this(posx) get] [$this(posy) get] [$this(radius) get]
destroy $this(fenetreAjoutVaisseau)
	
}


method MenuJoueurP edit {value} {
   #TODO
}

method MenuJoueurP change {args} {
   #TODO
}

method MenuJoueurP destructor {} {
   this inherited
}

#MenuJoueur
#
#MenuJoueur Controler

inherit MenuJoueur Control
method MenuJoueur constructor {parent liste window} {
	
	set this(MenuJoueurP) [MenuJoueurP ${objName}_pres $objName $liste $window]
	
    this inherited $parent "" ${objName}_pres ""
        
    this ajoutJoueurs $liste 
  
}


method MenuJoueur ajoutJoueurs {listejoueur} {

   
   dict for {id info} $listejoueur {
    puts "Joueur ajoute : $id :"
    dict with info {
        puts "   Name: $name"
 		this ajoutJoueur $name $id
 		}
    }
}

method MenuJoueur ajoutJoueur {nom id} {
	
	puts "Creation agent pac de $nom avec id= $id"

	Joueur ${objName}_${id} $objName $id $nom

}

method MenuJoueur ajoutJoueur_dansNoyau {nom} {


set id [$this(parent) ajoutJoueur_dansNoyau $nom]

this ajoutJoueur $nom $id

return $id

}
    
     
method MenuJoueur getListeJoueurs {} {

return [$this(parent) getListeJoueurs]

}

method MenuJoueur supprimerJoueur {idp} {

$this(parent) supprimerJoueur $idp
	
	
}

method MenuJoueur getListeVaisseau_joueur {idj} {
	
return [$this(parent) getListeVaisseau_joueur $idj]	
	
}  


method MenuJoueur ajouterVaisseau {id_joueur x y radius} {

$this(parent) ajouterVaisseau $id_joueur $x $y $radius

}




method MenuJoueur getListeVaisseau {} {

return [$this(parent) getListeVaisseau]

}

method MenuJoueur supprimerVaisseau {idj idv} {

$this(parent) supprimerVaisseau $idj $idv	
	
}

